package demo1;

interface IShape {
    /**
     * 成员变量修饰符默认为: public static final
     *
     * 关于成员变量
     *      1.默认被public static final修饰
     *      2.
     */
    int a = 10;
    /**
     * 成员方法默认为:抽象方法
     * 修饰符默认为:public abstract
     *
     * 关于成员方法:
     *      1.默认被public abstract稀释
     *      2.成员方法都是抽象方法,一般方法内部不需要实现
     *      3.如果被static default修饰,则内部方法可以进行实现
     */
    void draw();
//    default void func1() {
//        System.out.println("被default修饰的方法");
//    }
//
//    static void func2() {
//        System.out.println("被static修饰的方法");
//    }
}
class Flower implements IShape {
    public void draw() {
        System.out.println("画❀");
    }
}
class Rect implements IShape {
    public void draw() {
        System.out.println("画矩形");
    }
}
class Cycle implements IShape {
    public void draw() {
        System.out.println("画圆圈");
    }
}
public class Test {
    public static void main(String[] args) {

    }
    public static void main3(String[] args) {
        /**
         * 接口特性
         *      1.接口是一种引用类型,但是不能实例化
         *      2.接口中,成员变量修饰符全部是public static final
         *      3.接口中,成员方法默认为抽象方法,修饰符是public abstract
         *      4.接口中,成员方法内容不能实现,只能由实现接口的类实现
         *      5.实现接口的类重写接口方法时,修饰符不能使用默认的修饰
         *      6.如果想要实现内容,需要使用default/static进行修饰
         *      7.接口中,不能有任何代码块即构造方法
         *      8.接口不是类,但一样会生成.class的字节码文件
         *      9.如果一个类,没有全部重写接口中的抽象方法,则将该类设为抽象类(1.防止调用,体现安全系 2.防止实例化,意味着没有重写完,3.提示需要重写所有抽象方法)即可,普通类可以继承一个类,实现多个类
         */
    }
    public static void main2(String[] args) {
        Computer computer = new Computer();
        computer.openComputer();

        computer.useDevice(new KeyBoard());
        computer.useDevice(new Mouse());

        computer.powerComputer();
    }
    public static void func(IShape iShape) {
        iShape.draw();
    }
    public static void main1(String[] args) {
        IShape iShape1 = new Flower();
        //使用类本身也可以
//        Flower flower = new Flower();
//        func(flower);
        IShape iShape2 = new Rect();
        IShape iShape3 = new Cycle();

        func(iShape1);
        func(iShape2);
        func(iShape3);

        IShape[] iShape = {iShape1,iShape2,iShape3};
        for(IShape ishape : iShape) {
            ishape.draw();
        }
    }
}
